package Fisica;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import Hibernate.Presupuesto;

public abstract class PresupuestoFisica {

	
	//Busca un Presupuesto a partir de un identificador OK
    public static Presupuesto findById(Integer id) {
  	try {
	    	Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
	        session.beginTransaction();
	                
	        Query query = session
	        .createQuery("from Presupuesto as a where a.idPresupuesto = '"+id+"'");
	        List<Presupuesto> list = query.list();
	        
	        session.getTransaction().commit(); //Como ya se ha hecho la consulta, hago commit. 
	        								   //El commit cierra automnticamente la session.
	        SessionFactoryUtil.getSessionFactory().close();
	
	        if (list.isEmpty()) 
	        	{	System.out.println("No se encontro el Presupuesto");
	        		return new Presupuesto();
	        	}
	        else {	System.out.println("Se encontro el Presupuesto!!!");
	        		return list.get(0);
	        	}
	       }catch (RuntimeException re) {
				System.out.println("get failed: "+re);
				throw re;
			}
   }
    
  //Busca un Presupuesto a partir de un objeto Presupuesto OK
	public static Presupuesto find(Presupuesto c) {
		return PresupuestoFisica.findById(c.getIdpresupuesto());
    }
    
  //Busca un Presupuesto a partir de un identificador OK
    public static Presupuesto findByNombre(String str) {
    	try {
	    	Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
	        session.beginTransaction();
	                
	        Query query = session
	        .createQuery("from Presupuesto as a where a.nombre = '"+str+"'");
	        List<Presupuesto> list = query.list();
	        
	        session.getTransaction().commit(); //Como ya se ha hecho la consulta, hago commit. 
	        								   //El commit cierra automnticamente la session.
	        SessionFactoryUtil.getSessionFactory().close();
	
	        if (list.isEmpty()) 
	        	{	System.out.println("No se encontro el Nombre");
	        		return new Presupuesto();
	        	}
	        else {	System.out.println("Se encontro el Nombre!!!");
	        		return list.get(0);
	        	}
	       }catch (RuntimeException re) {
				System.out.println("get failed: "+re);
				throw re;
			}
   }
    
  //Busca un Presupuesto a partir de un identificador OK
    public static List<Presupuesto> list() {
    	try {
	    	Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
		    session.beginTransaction();
		                
		    Query query = session
		     .createQuery("from Presupuesto as p " +
		     		"order by p.dueno.cliente.apellido, " +
		     				"p.dueno.cliente.nombre asc");
		    List<Presupuesto> list = query.list();
		        
		    session.getTransaction().commit(); //Como ya se ha hecho la consulta, hago commit. 
		        								   //El commit cierra automnticamente la session.
		    SessionFactoryUtil.getSessionFactory().close();
		
		    return list;	 
    	}catch (RuntimeException re) {
			System.out.println("get failed: "+re);
			throw re;
		}
   }
    
  //Agrego un Presupuesto a la base OK
	public static void add(Presupuesto c) {
		try{
			Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
	        session.beginTransaction();
	        
	        //chekeo que el Presupuesto no exista para agregarlo
	        Query query = session
	        .createQuery("from Presupuesto as p " +
	        		"where p.dueno.idduenio = '"+c.getDueno().getIdduenio()+"' " +
	        		"and p.fechaemision = '"+c.getFechaemision()+"' ");
	        List<Presupuesto> list = query.list();
	
	        if (list.isEmpty())
	        {
	        	session.save(c);
	        	System.out.println("Presupuesto agregado con exito!!!");
	        }
	        
	        session.getTransaction().commit(); //Como ya se ha hecho la consulta, hago commit. 
	        								   //El commit cierra automnticamente la session.
	        SessionFactoryUtil.getSessionFactory().close();
		}catch (RuntimeException re) {
				System.out.println("get failed: "+re);
				throw re;
			}
	}
	
	//Actualizacion de un Presupuesto OK
	public static void update(Presupuesto c) {
		try{
	        Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
	        session.beginTransaction();
	        
	        //chekeo que el Presupuesto no exista para agregarlo 
	        System.out.println("chekeo que el Presupuesto no exista para agregarlo ");
	        if (c.getIdpresupuesto() != 0) {
	        	session.saveOrUpdate(c);
	            System.out.println("Presupuesto actualizado con exito!!!");
	        }
	               
	        session.getTransaction().commit(); //Como ya se ha hecho la consulta, hago commit. El commit cierra automnticamente la session.
	        SessionFactoryUtil.getSessionFactory().close();
		}catch (RuntimeException re) {
				System.out.println("get failed: "+re);
				throw re;
			}
    }
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		Presupuesto ch;		
//		int x = 1;
//		String s = "Luciano";
////		Presupuesto c = ch.findById(x);
//		Presupuesto c = PresupuestoFisica.findByNombre(s);
//		Presupuesto c = PresupuestoFisica.findById(x);
//		c.setIdPresupuesto(1);
//		System.out.println("c.getApellido(): "+c.getApellido() );
//		System.out.println("c.getNombre(): "+c.getNombre() );
//		System.out.println("c.getDireccion(): "+c.getDireccion() );
//		System.out.println("c.getTelefono(): "+c.getTelefono() );
//		System.out.println("c.getEmail(): "+c.getEmail() );
//		System.out.println("c.getIdPresupuesto(): "+c.getIdPresupuesto() );
//		System.out.println("c.getIdPresupuesto() == 0: "+(c.getIdPresupuesto() == 0) );
		
//		List<Presupuesto> l = PresupuestoFisica.list();
//		System.out.println("ID  |    APELLIDO   |  NOMBRE  |   DIRECCION  |   TELEFONO   |  EMAIL");
//		for (Presupuesto cl : l) {
//			System.out.print(cl.getIdPresupuesto() );
//			System.out.print(" | ");
//			System.out.print(cl.getApellido() );
//			System.out.print(" | ");
//			System.out.print(cl.getNombre());
//			System.out.print(" | ");
//			System.out.print(cl.getDireccion() );
//			System.out.print(" | ");
//			System.out.print(cl.getTelefono() );
//			System.out.print(" | ");
//			System.out.println(cl.getEmail() );		
//		} 
		
//		Presupuesto cu = new Presupuesto();
//		cu.setIdPresupuesto(6);
//		cu.setApellido("apellidoV");
//		cu.setNombre("nombreV");
//		cu.setDireccion("calleV 333");
//		cu.setTelefono("33648");
//		cu.setEmail("viejo@mail.com");
//		
//		
//		PresupuestoFisica.update(cu);
		

	}

}
